# llegim les dades en format text (“.sav”) de SPSS
library(haven)
library(tidyverse)
## ── Attaching packages ────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.1.0 ✔ purrr 0.2.5
## ✔ tibble 2.0.1 ✔ dplyr 0.7.8
## ✔ tidyr 0.8.2 ✔ stringr 1.3.1
## ✔ readr 1.3.1 ✔ forcats 0.3.0
## ── Conflicts ───────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
setwd("~/Desktop/R - BData/GemmaRenart - ACP 1")
dades <- read_sav("Data/Posicionament.sav")
dades.sel <- dades[,10:26] #No prenem la variable val_global perquè sobreentenem que recull informació de cadascuna
summary(dades.sel)
## val_play val_ento val_tran val_urba
## Min. :1.000 Min. :2.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:3.000 1st Qu.:4.000
## Median :6.000 Median :6.000 Median :5.000 Median :5.000
## Mean :5.725 Mean :5.895 Mean :4.567 Mean :5.018
## 3rd Qu.:7.000 3rd Qu.:7.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
## val_tiem val_segu val_inor val_inal
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:6.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000
## Median :6.000 Median :5.000 Median :5.000 Median :6.000
## Mean :6.017 Mean :5.161 Mean :5.422 Mean :5.488
## 3rd Qu.:7.000 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
## val_inof val_vacu val_valu val_vade
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:5.000 1st Qu.:4.000
## Median :6.000 Median :5.000 Median :6.000 Median :5.000
## Mean :5.597 Mean :5.195 Mean :5.614 Mean :5.014
## 3rd Qu.:6.000 3rd Qu.:6.000 3rd Qu.:7.000 3rd Qu.:6.000
## Max. :7.000 Max. :7.000 Max. :7.000 Max. :7.000
## val_vare val_rere val_reti val_real
## Min. :1.000 Min. :1.00 Min. :1.00 Min. :1.000
## 1st Qu.:5.000 1st Qu.:4.00 1st Qu.:4.00 1st Qu.:4.000
## Median :6.000 Median :5.00 Median :5.00 Median :5.000
## Mean :5.591 Mean :4.93 Mean :4.81 Mean :5.019
## 3rd Qu.:6.000 3rd Qu.:6.00 3rd Qu.:6.00 3rd Qu.:6.000
## Max. :7.000 Max. :7.00 Max. :7.00 Max. :7.000
## val_amab
## Min. :1.000
## 1st Qu.:5.000
## Median :6.000
## Mean :5.714
## 3rd Qu.:7.000
## Max. :7.000
library(lattice)
splom(dades.sel , cex=0.1)
splom( ~dades.sel[,1:6], pscale=0, alpha=0.2, cex=0.5, pch=20)
# install.packages("corrplot")
library(corrplot)
## corrplot 0.84 loaded
p.mat <- cor(dades.sel)
corrplot(cor(dades.sel), method = "color",
type = "upper", order = "hclust", number.cex = .5,
addCoef.col = "black", # Add coefficient of correlation
tl.col = "black", tl.srt = 90, # Text label color and rotation
# Combine with significance
p.mat = p.mat, sig.level = 0.1, insig = "label_sig",
# hide correlation coefficient on the principal diagonal
diag = FALSE)
Les components s’obtenen com a combinacions lineals de les variables originals, concepte semblant al de mitjana ponderada, amb l’objectiu d’explicar la màxima variància possible de les variables originals.
Se seleccionen de la manera següent: S’extreu una primera component de manera que reculli la màxima variància del conjunt de les variables originals. S’extreu una segona component, de manera que no estigui correlacionada amb la primera, i que extregui la màxima variància que resta al conjunt de dades originals. D’aquesta manera, les diferents components ja no seran redundants entre elles. *Continuem així fins arribar a l’extracció total de la variància de les variables originals.
acp <-prcomp(dades.sel,center=T,scale.=T)
#Recordem que el sumatori de variancies ha de ser igual al número de variables, p = 18
print(acp$sdev^2)
## [1] 5.5411089 1.5822168 1.2712134 1.0733528 0.9404629 0.8221782 0.7324637
## [8] 0.6433289 0.6174939 0.6011664 0.5754384 0.5302212 0.5097981 0.4779473
## [15] 0.4506381 0.3432924 0.2876785
summary(acp)
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 2.354 1.25786 1.12748 1.03603 0.96977 0.90674
## Proportion of Variance 0.326 0.09307 0.07478 0.06314 0.05532 0.04836
## Cumulative Proportion 0.326 0.41902 0.49380 0.55693 0.61226 0.66062
## PC7 PC8 PC9 PC10 PC11 PC12
## Standard deviation 0.85584 0.80208 0.78581 0.77535 0.75858 0.72816
## Proportion of Variance 0.04309 0.03784 0.03632 0.03536 0.03385 0.03119
## Cumulative Proportion 0.70371 0.74155 0.77787 0.81323 0.84708 0.87827
## PC13 PC14 PC15 PC16 PC17
## Standard deviation 0.71400 0.69134 0.67130 0.58591 0.53636
## Proportion of Variance 0.02999 0.02811 0.02651 0.02019 0.01692
## Cumulative Proportion 0.90826 0.93638 0.96288 0.98308 1.00000
Observem que les 5 primeres variables representen un 60.805% de la variància total p=18
print(acp$sdev^2)
## [1] 5.5411089 1.5822168 1.2712134 1.0733528 0.9404629 0.8221782 0.7324637
## [8] 0.6433289 0.6174939 0.6011664 0.5754384 0.5302212 0.5097981 0.4779473
## [15] 0.4506381 0.3432924 0.2876785
plot(acp$sdev^2, type='h', col=ifelse(acp$sdev^2 > 1 ,"red", "grey"), lwd = 12)
abline(h=1, col="green", lwd = 4)
Aquest criteri ens faria destacar les 4 primeres variables, que expliquen el 55,562% de les variables…
plot(acp, type='l')
segons aquest criteri, agafaríem sols la 1a variabale, que no és suficient ja que només explica aprox. un 30% de les variables.
Com que la solució no està molt clara, prendrem el 1r criteri el qual la interpretació amb 4 components…
cor(dades.sel,acp$x[,1:4])
## PC1 PC2 PC3 PC4
## val_play -0.5027829 0.4520666149 -0.145355022 0.051932797
## val_ento -0.5628075 0.3357973473 0.038648181 0.082929082
## val_tran -0.5727752 0.3083218673 -0.050984680 0.270026595
## val_urba -0.5440965 0.2702819573 -0.008983050 0.478291396
## val_tiem -0.4009045 0.2261732058 -0.117106051 0.137969217
## val_segu -0.5274726 0.1814803175 -0.001641926 0.301373482
## val_inor -0.6338702 0.0899025208 -0.205121773 -0.413908737
## val_inal -0.6686428 0.0398825597 -0.279003989 -0.474349933
## val_inof -0.7038970 0.1358448882 -0.097920597 -0.293166428
## val_vacu -0.6278123 -0.0587189396 0.294357345 -0.167061572
## val_valu -0.3670303 -0.0004613094 0.668436794 -0.180469984
## val_vade -0.5580057 -0.1311099225 0.485271906 -0.007808646
## val_vare -0.5793493 -0.2666263159 0.401668150 0.060649286
## val_rere -0.5310222 -0.6527141730 -0.147992219 0.219248421
## val_reti -0.5798596 -0.5652348650 -0.196931646 0.231037690
## val_real -0.6304271 -0.3686278018 -0.333698331 -0.062021679
## val_amab -0.6104266 0.1078028502 -0.019232545 0.021258001
# Guardem en un objecte, que anomenarem C, la matriu de correlacions de cada variable amb les dues primeres components
# (saturacions):
C <- cor(dades.sel,acp$x)[ , 1:4 ]
# Obtenim les comunalitats amb el següent càlcul:
rowSums(C*C)
## val_play val_ento val_tran val_urba val_tiem val_segu val_inor
## 0.4809799 0.4378830 0.4986476 0.5979367 0.2446281 0.4019912 0.6232693
## val_inal val_inof val_vacu val_valu val_vade val_vare val_rere
## 0.7515249 0.6094599 0.5121520 0.6140886 0.5641099 0.5717508 0.7779920
## val_reti val_real val_amab
## 0.7478881 0.6485260 0.3850638
La variable ‘val_tiem’ és la que menor percentatge de variància explicada té (24.46%). La variable ‘val_rere’ és la que major percentatge de variància explicada té (77.77%).
plot(C[,1],C[,2],xlim=c(-1,1),ylim=c(-1,1),xlab="primera component",ylab="segona component")
text(x=C[,1],y=C[,2],labels=row.names(C),pos=4,cex=0.5)
title(main="Gràfic de Components")
abline(h=0, v=0, col = "gray60")
plot(C[,2],C[,4],xlim=c(-1,1),ylim=c(-1,1),xlab="tercera component",ylab="quarta component")
text(x=C[,2],y=C[,4],labels=row.names(C),pos=4,cex=0.5)
title(main="Gràfic de Components")
abline(h=0, v=0, col = "gray60")
rotats <- varimax(C)
rotats
## $loadings
##
## Loadings:
## PC1 PC2 PC3 PC4
## val_play -0.600 -0.338
## val_ento -0.566 0.218 -0.264
## val_tran -0.670 -0.101 0.122 -0.157
## val_urba -0.743 -0.171 0.123
## val_tiem -0.455 -0.180
## val_segu -0.583 -0.177 0.160
## val_inor -0.213 -0.133 0.143 -0.734
## val_inal -0.179 -0.191 0.110 -0.819
## val_inof -0.337 -0.132 0.244 -0.647
## val_vacu -0.210 -0.175 0.565 -0.344
## val_valu 0.771
## val_vade -0.196 -0.195 0.690 -0.108
## val_vare -0.178 -0.358 0.637
## val_rere -0.858 0.170
## val_reti -0.164 -0.828 0.134 -0.132
## val_real -0.157 -0.644 -0.455
## val_amab -0.434 -0.189 0.231 -0.328
##
## PC1 PC2 PC3 PC4
## SS loadings 2.780 2.233 2.094 2.360
## Proportion Var 0.164 0.131 0.123 0.139
## Cumulative Var 0.164 0.295 0.418 0.557
##
## $rotmat
## [,1] [,2] [,3] [,4]
## [1,] 0.5862411 0.4289260 -0.4382240 0.5294370
## [2,] -0.5766834 0.7927557 -0.1502493 -0.1280621
## [3,] 0.1045826 0.3008221 0.8749621 0.3647051
## [4,] -0.5593032 -0.3115559 -0.1408053 0.7551733
names(rotats)
## [1] "loadings" "rotmat"
rotats$loadings
##
## Loadings:
## PC1 PC2 PC3 PC4
## val_play -0.600 -0.338
## val_ento -0.566 0.218 -0.264
## val_tran -0.670 -0.101 0.122 -0.157
## val_urba -0.743 -0.171 0.123
## val_tiem -0.455 -0.180
## val_segu -0.583 -0.177 0.160
## val_inor -0.213 -0.133 0.143 -0.734
## val_inal -0.179 -0.191 0.110 -0.819
## val_inof -0.337 -0.132 0.244 -0.647
## val_vacu -0.210 -0.175 0.565 -0.344
## val_valu 0.771
## val_vade -0.196 -0.195 0.690 -0.108
## val_vare -0.178 -0.358 0.637
## val_rere -0.858 0.170
## val_reti -0.164 -0.828 0.134 -0.132
## val_real -0.157 -0.644 -0.455
## val_amab -0.434 -0.189 0.231 -0.328
##
## PC1 PC2 PC3 PC4
## SS loadings 2.780 2.233 2.094 2.360
## Proportion Var 0.164 0.131 0.123 0.139
## Cumulative Var 0.164 0.295 0.418 0.557
val_play -val_ento val_tran val_urba -val_segu -val_amab -val_tiem
val_rere val_reti val_real
val_valu val_vale val_vare -val_vacu
val_inor val_inal val_inof
plot(rotats$loadings[,1],rotats$loadings[,2],xlim=c(-1,1),ylim=c(-1,1),xlab="primera component",ylab="segona component")
text(x=rotats$loadings[,1],y=rotats$loadings[,2],labels=row.names(C),pos=4,cex=0.5)
title(main="Grafic de Components Rotades")
abline(h=0, v=0, col = "gray60")
plot(rotats$loadings[,3],rotats$loadings[,4],xlim=c(-1,1),ylim=c(-1,1),xlab="tercera component",ylab="quarta component")
text(x=rotats$loadings[,3],y=rotats$loadings[,4],labels=row.names(C),pos=4,cex=0.5)
title(main="Grafic de Components Rotades")
abline(h=0, v=0, col = "gray60")
plot(acp$x[,1],acp$x[,2],xlab='primera component',ylab='segona component')
text(x=acp$x[,1],y=acp$x[,2],labels=row.names(dades.sel),pos=4,cex=0.5)
abline(h=0,v=0,col="gray60")
plot(acp$x[,3],acp$x[,4],xlab='tercera component',ylab='quarta component')
text(x=acp$x[,3],y=acp$x[,4],labels=row.names(dades.sel),pos=4,cex=0.5)
abline(h=0,v=0,col="gray60")
biplot(acp$x[,1:2],C,cex=0.5)
abline(h=0,v=0,col="gray60")
biplot(acp$x[,3:4],C,cex=0.5)
abline(h=0,v=0,col="gray60")
Interpretació amb variables il·lustratives.
Les variables il·lustratives són aquelles que no han format part de l’ACP, però poden estar-hi relacionades.
Per tant, poden ser variables útils per descriure i interpretar la solució obtinguda. Aquest ús de les variables il·lustratives permet realitzar un contrast d’hipòtesi i interpretar els nivells de significació de la relació entre la variable il·lustrativa i cada una de les components.
El rebuig d’aquesta hipòtesi implica afirmar que les components (i, per tant, les variables que aquestes components resumeixen) estan relacionades de forma significativa amb la variable il·lustrativa. La relació amb les poques components fa innecessari establir relacions amb les moltes variables originals.
#Per aquest exercici tindrà sentit utilitzar les variables 'var_global' (valoració global) i 'ingr_pta' (ingressos en pessetes), ja que ambdós podrien
ilus<-data.frame(global_val=dades$val_glob,acp$x[,1:4])
ilus.num<-data.frame(global_val=dades$val_glob,ingr_pta=dades$ingr_pta,acp$x[,1:4])
plot(ilus.num[,-1])
plot(ilus.num[,-2])
La valoració segons
library(Hmisc)
## Loading required package: survival
## Loading required package: Formula
##
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:dplyr':
##
## src, summarize
## The following objects are masked from 'package:base':
##
## format.pval, units
rcorr(as.matrix(ilus.num[,-2]),type='pearson')
## global_val PC1 PC2 PC3 PC4
## global_val 1.00 -0.69 0.01 0.06 -0.02
## PC1 -0.69 1.00 0.00 0.00 0.00
## PC2 0.01 0.00 1.00 0.00 0.00
## PC3 0.06 0.00 0.00 1.00 0.00
## PC4 -0.02 0.00 0.00 0.00 1.00
##
## n= 1271
##
##
## P
## global_val PC1 PC2 PC3 PC4
## global_val 0.0000 0.8175 0.0229 0.3829
## PC1 0.0000 1.0000 1.0000 1.0000
## PC2 0.8175 1.0000 1.0000 1.0000
## PC3 0.0229 1.0000 1.0000 1.0000
## PC4 0.3829 1.0000 1.0000 1.0000
Segons podem observar la primera component (PC1 = entorn) és significativa al 95% respecte a la valoració global, la 4a component (PC3 = oferta) ho és al 90%. Les altres components no són significatives.
Realitzem un gràfic bivariant per on representar-hi les puntuacions mitjanes de cada localitat EL BLOC A CONTINUACIÓ NO HE ACONSEGUIT TREBALLAR-LO AMB ÈXIT. O bé mostra error per diferent longituds dels objectes, o per si no és vector, o error de sintaxi…